// 2025/5/31
// 接雨水问题

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * max water
     * @param arr int整型vector the array
     * @return long长整型
     */
    long long maxWater(vector<int>& arr) {
        // write code here
        int n = arr.size();
        vector<int> left(n + 2, 0), right(n + 2, 0);
        for(int i = 1, j = n; i <= n && j >= 1; i++, j--)
        {
            left[i] = max(arr[i - 1], left[i - 1]);
            right[j] = max(arr[j - 1], right[j + 1]);
        }
        long long ans = 0;
        for(int i = 1; i <= n; i++)
        {
            ans += min(left[i], right[i]) - arr[i - 1];
        }
        return ans;
    }
};